﻿Imports PTIC_Util.ValueEtatCalcul

Namespace GestionCalculs
    ''' <summary>
    ''' Fonction de Calcul Composee
    ''' </summary>
    ''' <remarks></remarks>
    Public Class FonctionCalculComposee
        Inherits FonctionCalculRacine

        ''' <summary>
        ''' Méthode qui va s'exécuter lorsque le calcul va être lancé
        ''' </summary>
        ''' <remarks></remarks>
        Protected _FonctionCalcul As TypeFonctionCalcul

        ''' <summary>
        ''' Constructeur
        ''' </summary>
        ''' <param name="modeRecalcul">Mode de recalcul</param>
        ''' <param name="fonctionCalcul">Adresse de la foncion à exécuter lors d'un calcul<see cref="FonctionCalcul" /></param>
        ''' <remarks></remarks>
        Public Sub New(ByVal modeRecalcul As TypeRecalcul, _
               ByVal fonctionCalcul As TypeFonctionCalcul)
            MyBase.New(modeRecalcul)
            _FonctionCalcul = fonctionCalcul
        End Sub

        ''' <summary>
        ''' Lancer les calculs
        ''' </summary>
        ''' <remarks></remarks>
        Public Overrides Sub Calculer(Optional ByVal ForcerCalcul As Boolean = False)
            Dim hasFonctionImpactanteNonInitialisee As Boolean = False
            For Each fonctionImpactante As FonctionCalcul In ListeFonctionsCalculIntermediaires()
                If fonctionImpactante.EtatCalcul <> A_JOUR Or ForcerCalcul = True Then
                    fonctionImpactante.Calculer()
                End If
                If fonctionImpactante.EtatCalcul = NON_INITIALISE Then
                    hasFonctionImpactanteNonInitialisee = True
                End If
            Next
            If Not hasFonctionImpactanteNonInitialisee And Not EtatCalcul = A_JOUR Then
                _FonctionCalcul.Invoke()
            ElseIf Not EtatCalcul = A_JOUR Then
                _etatCalcul.Value = NON_INITIALISE
            End If
            If Not _etatCalcul.Value = NON_INITIALISE Then _etatCalcul.Value = A_JOUR
            RaiseEventAfterCalculer(Me, New EventArgs)
        End Sub
    End Class
End Namespace
